package com.zjw.core.reflect;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * 获取类的一个方法，可以是私有方法也可以是公有方法
 * */
public class ReflectPrivateMethodExample {

    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        Class son = Son.class;

        //获取私有方法
        //第一个参数为要获取的私有方法的名称
        //第二个为要获取方法的参数的类型，参数为 Class...，没有参数就是null
        //方法参数也可这么写 ：new Class[]{String.class , int.class}
        Method method = son.getDeclaredMethod("draw",String.class);

        if(method != null){
            //获取私有方法的访问权
            //只是获取访问权，并不是修改实际权限（访问私有方法必须加，访问公有方法可以不加setAccessible）
            method.setAccessible(true);
            //使用 invoke 反射调用私有方法
            //write 是获取到的私有方法
            //new Son() 要操作的对象
            //后面参数是调用方法传的实参
            method.invoke(new Son(),"我要赚一亿");
        }
    }
}
